package com.qcby.conf;

import com.qcby.servlet.HttpServlet;
import com.qcby.util.SearchClassUtil;
import com.qcby.webServlet.WebServlet;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/************************************
 * @PACKAGE : com.qcby.conf
 * @Author    :  叫我老伯
 * @Date    : 2022/6/30 23:26
 * @Desc    :
 ***********************************/
public class ServletConfigMapping {

    //6、定义servlet容器
    public static Map<String, Class<HttpServlet>>  classMap = new HashMap<>();
    //5、讲每一个获取自定义信息servlet得信息放入到ServletConfig当中
    private static List<ServletConfig> configs = new ArrayList<>();




    static{
        //1、获取用户自定义得servlet全路径名
        List<String> classPaths = SearchClassUtil.searchClass();
        for (String classPath: classPaths) {
            try {
                getMessage(classPath);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    //2、利用反射获取注解信息
    public static void getMessage(String classPath) throws Exception {
        Class clazz = Class.forName(classPath);

        //3、获取注解对象
        WebServlet webServlet =(WebServlet)clazz.getDeclaredAnnotation(WebServlet.class);
        //4、System.out.println(webServlet.urlMapping());
        //7、需要将加载的信息，加载到configs集合当中-----保证url和类对象是相同得。
        configs.add(new ServletConfig(webServlet.urlMapping(), classPath));
    }

    //8、将url和类对象放入Servlet容器
    public static void initServlet() throws Exception {
        System.out.println("****//");
        for (ServletConfig config: configs) {
            classMap.put(config.getUrlMapping(), (Class<HttpServlet>) Class.forName(config.getClassPath()));
        }
    }


}
